package com.ztesoft.book.core.base.base.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.ztesoft.book.core.sys.sysuser.dto.SysUserDTO;

import java.util.List;

/**
 * @Description 通用Service
 * @Author YangFan
 * @Date 2021-06-22 17:29
 */
public interface BaseExService<T, Q> extends IService<T> {

    /**
     * 方法功能描述:
     * < 该方法在API项目中无效，会报错，因为API项目并未引入Shiro >
     *
     * @return SysUserDTO                    【返回值 注释说明】
     * @author YangFan
     * @date 2021-06-30 07:27
     */
    SysUserDTO getShiroUser();


    /**
     * 方法功能描述:
     * < 根据ID获取实体类对象 >
     *
     * @param id 【参数 1 注释说明】
     * @return T                            【返回值 注释说明】
     * @author YangFan
     * @date 2021-06-30 07:27
     */
    T findById(String id);


    /**
     * 方法功能描述:
     * < 根据查询条件，查询条件为传入对象中各个字段的值，获取实体类对象 >
     *
     * @param qo 【参数 1 注释说明】
     * @return T                            【返回值 注释说明】
     * @author YangFan
     * @date 2021-06-30 07:27
     */
    T findOne(Q qo);


    /**
     * 方法功能描述:
     * < 根据查询条件获取列表 >
     *
     * @param qo 【参数 1 注释说明】
     * @return List list
     * @author YangFan
     * @date 2021-06-30 07:28
     */
    List<T> findList(Q qo);


    /**
     * 方法功能描述:
     * < 根据查询条件以及分页参数获取分页对象 >
     *
     * @param qo       【参数 1 注释说明】
     * @param current  【参数 2 注释说明】
     * @param pageSize 【参数 3 注释说明】
     * @return PageInfo pageInfo
     * @author YangFan
     * @date 2021-06-30 07:28
     */
    PageInfo<T> findPage(Q qo, final Integer current, final Integer pageSize);


    /**
     * 方法功能描述:
     * < 保存实体类 >
     *
     * @param t 【参数 1 注释说明】
     * @return void                            【返回值 注释说明】
     * @author YangFan
     * @date 2021-06-30 07:29
     */
    void saveObject(T t);


    /**
     * 方法功能描述:
     * < 更新对象中非NULL字段 >
     *
     * @param t 【参数 1 注释说明】
     * @return void                            【返回值 注释说明】
     * @author YangFan
     * @date 2021-06-30 07:29
     */
    void updateObject(T t);


    /**
     * 方法功能描述:
     * < 根据ID删除对象 >
     *
     * @param id 【参数 1 注释说明】
     * @return void                            【返回值 注释说明】
     * @author YangFan
     * @date 2021-06-30 07:29
     */
    void deleteObject(String id);


    /**
     * 方法功能描述:
     * < 根据ID删除对象（逻辑删除） >
     *
     * @param id 【参数 1 注释说明】
     * @return void                            【返回值 注释说明】
     * @author YangFan
     * @date 2021-06-30 16:59
     */
    void fakeDeleteByPrimaryKey(String id);


}
